#include "p_comp.h"
#include "data_src.h"
#include "unistd.h"
#include "wavelib/wavelib.h"

const float PI=3.1415926f; //PI

s16 s_in[S_N]; //信号
s16 s_out[S_N]; //信号
S_PCP_MAIN_FRE pcp_buf; //压缩过的信号缓存
S_PCP_WAVELET pcp_buf1; //压缩过的信号缓存
S_PCP_MAIN_FRE compress_data[8]; //8路压缩数据
S_PCP_WAVELET compress1_data[8]; //8路压缩数据
int use_alg=0; //0: fft, 1: 小波

void gen_data_test(void) //自己生成数据测试
{
	int i;
	//生成信号
	for(i=0;i<S_N;i++)
	{
		float t=i/12800.0f; //单位秒
		float fre=49; //频率
		float ang=2*PI*fre*t;
		s_in[i]=2048*sin(ang);
	}
	//CComFile cf; //保存原始信号
	//cf.open("org.bin","wb");
	//cf.write((u8*)s_in,sizeof(s_in));
	//cf.close();
	//压缩
	printf("use_alg: %d\n", use_alg);
	if(use_alg == 0) //0: fft, 1: 小波
	{
		tc_compress(s_in, pcp_buf);
		CComFile cf;
		cf.open("pcp.bin","wb");
		cf.write((u8*)&pcp_buf,sizeof(pcp_buf));
		cf.close();
	}
	else if(use_alg == 1)
	{
		tc_compress1(s_in, pcp_buf1);
	}
	//解压缩
	//tc_decompress(pcp_buf, s_out);
}
void test_from_csv(const char *filename) //输入csv文件测试
{
	int i;
	read_pdata_from_csv(filename); //csv数据
	for(int k=0;k<8;k++) //电压、电流都是相同的结构
	{
		int j=0;
		for(i=0;i<S_N;i++)
		{
			if(i>=datain.size()) //若输入没有那么多
			{
				s_in[i]=0;
				continue;
			}
			s_in[i] = datain[j++].u[k];
		}
		//FFT压缩
		tc_compress(s_in, compress_data[k]);
		//重新压一遍(效果微弱)
		//tc_compress(compress_data[k].dd_list,compress_data[k]);
	}
	CComFile cf;
	cf.open("pcp.bin","wb");
	//cf.write(((u8*)compress_data)+sizeof(compress_data)/2,sizeof(compress_data)/2);
	//cf.write(((u8*)compress_data),sizeof(compress_data)/2);
	cf.write(((u8*)compress_data),sizeof(compress_data));
	cf.close();
}
extern void analysis_from_csv(const char *filename); //输入csv文件测试
int main(int argc, char *const argv[])
{
	int test_type=0; //0: 自己生成，1：csv压缩，2：输入文件的参数分析
	string filename=""; //缓存文件名
	int opt=-1; //0是长参数，getopt_long要用
	while ((opt = getopt(argc, argv, "gc:a:fw")) != -1)
	{
		switch (opt)
		{
			case 'g': test_type = 0; break; //自己生成数据
			case 'c': filename=optarg; test_type = 1; break; //输入csv文件测试
			case 'a': filename=optarg; test_type = 2; break; //输入文件的参数分析
			case 'f': use_alg = 0; break; //算法使用fft
			case 'w': use_alg = 1; break; //算法使用小波
			default: printf("参数错误\n"); break; // '?'
		}
	}
	printf("test_type: %d, use_alg: %d\n",test_type, use_alg);
	switch(test_type)
	{
	case 0: gen_data_test(); break; //0: 自己生成数据
	case 1: test_from_csv(filename.c_str()); break; //1: 输入csv文件测试
	case 2: analysis_from_csv(filename.c_str()); break; //2: 输入文件的参数分析
	}

	return 0;
}

